python3_高级特性

切片|迭代|列表生成式|生成器|迭代器。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#!/usr/bin/python3
# -*- coding: utf-8 -*-

print("切片-------------")
#就像切面包一样,你想取列表或tuple的第n-m个元素是,就可以使用切片(slice)
a=['aaa','bbb','ccc','ddd']
print(a)
print(a[:3])
print(a[1:3])
print(a[-2:]) #取最后两个元素
print(a[-3:-1]) #倒数第三个到倒数第二个(总2个元素)
L=list(range(30))
print(L)
print(L[:10:2]) #前10个数,每隔两个取一个
print(L[:]) #什么都不写可以原样复制一个list
# tuple和字符串也可以使用切片操作
print((0,1,2,3,4,5,6)[:3])
print("abcdefg"[::2])

print("利用切片,实现trim()-------------")
def trim(s):
if len(s)==0:
return s
if s[0]==' ':
return trim(s[1:])
if s[-1]==' ':
return trim(s[:-1])
else:
return s
#test
if trim('hello ') != 'hello':
print('测试失败!')
elif trim(' hello') != 'hello':
print('测试失败!')
elif trim(' hello ') != 'hello':
print('测试失败!')
elif trim(' hello world ') != 'hello world':
print('测试失败!')
elif trim('') != '':
print('测试失败!')
elif trim(' ') != '':
print('测试失败!')
else:
print('测试成功!')

print("判断是否可以迭代-------------")
from collections import Iterable
print(isinstance('abcd',Iterable))
print(isinstance([1,2,3,4],Iterable))
print(isinstance((1,2,3,4),Iterable))

print("enumerate实现下标循环-------------")
for i,value in enumerate([1,2,3,4]):
print(i,value)

print("使用两个变量迭代-------------")
for x,y in ((1,1),(2,2),(3,3)):
print(x,y)

print("列表生成式-------------")
#顾名思义,用来生成列表的式子
print([x*x for x in range(1,11)])
print([x * x for x in range(1,11) if x%2 == 0])
#两层循环生成全排列
print([m+n for m in'abc' for n in 'xyz'])
#用列表生成式列出当前目录所有文件
import os
print([d for d in os.listdir('.')])
#列表生成式将字符串转小写
L=['Hello','World','IBM','Apple']
print([s.lower() for s in L])
#practice
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [s.lower() for s in L1 if isinstance(s, str)]
print(L1)
print(L2)
if L2 == ['hello', 'world', 'apple']:
print('测试通过!')
else:
print('测试失败!')

print("生成器-------------")
g=(x*x for x in range(10))
print('next(g):')
next(g)
next(g)
next(g)

#fib
print('斐波那契数列')
def fib(max):
n,a,b = 0,0,1
while n<max:
yield b #把函数变为generator
a,b=b,a+b
n=n+1
return 'done'

f=fib(9)
#用for循环遍历生成器,不用自己捕获异常
for x in f:
print(x)

#自己用next遍历,需要捕获异常
while True:
try:
x=next(f)
print('g:',x)
except StopIteration as e:
print('Generator return value:',e.value)
break

#杨辉三角
def triangles():
l=[1]
while True:
yield l
l=[0]+l+[0]
l=[l[i]+l[i+1] for i in range(len(l)-1)]

t=triangles()
for i in range(7):
print(next(t))

#迭代器 可迭代的
from collections import Iterator
from collections import Iterable
print(isinstance([],Iterator))
print(isinstance([],Iterable))

参考

欢迎与我分享你的看法。
转载请注明出处:http://taowusheng.cn/